/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lintulaskenta.rekisteri;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import lintulaskenta.entity.Lajihavainto;
import lintulaskenta.entity.Pistevuosi;

/**
 *
 * @author amjaalto
 */
public class PistevuosiRekisteri extends Rekisteri {

    public List<Pistevuosi> haePistevuosiEhdoilla(Map<String, Object> ehdot) throws Exception {
        EntityManager em = getEntityManager();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Pistevuosi> cq = cb.createQuery(Pistevuosi.class);

        Root<Pistevuosi> juuri = cq.from(Pistevuosi.class);

        cq.select(juuri);

        Predicate[] predikaatit = new Predicate[ehdot.size()];
        int index = 0;
        for (String attribuutinNimi : ehdot.keySet()) {

            predikaatit[index] = cb.equal(juuri.get(attribuutinNimi), ehdot.get(attribuutinNimi));
            index++;
        }

        cq.where(predikaatit);

        return em.createQuery(cq).getResultList();
    }


    public static void main(String[] args) throws Exception {

        PistevuosiRekisteri pvr = new PistevuosiRekisteri();

        Map<String, Object> ehdot = new HashMap<String, Object>();
//        ehdot.put("reitinNumero", 5001);
        List<Pistevuosi> pistevuodet = pvr.haePistevuosiEhdoilla(ehdot);

        System.out.println("Print");
        System.out.println("Total " + pistevuodet.size() + " pistevuotta.");

        List<Lajihavainto> lajit  = pistevuodet.get(0).getLajihavainnot();

        System.out.println("Pistevuoden järjestysnumero: " + pistevuodet.get(0).getPisteenJarjestysnumero() + ".");
//        for (Lajihavainto l : lajit)
//            System.out.println("Lintulaji: " + l.getParvilaji()  + ".");

        System.out.println("Finish");

    }
}
